/**
 * 名称：图层显隐控制
 * 作用：根据传入的3dtili图层名称与状态进行图层的显示与隐藏
 * 参数：layerName:图层名称
 * 状态：已完成
 * 网址：https://blog.csdn.net/qq_41048063/article/details/88784094
 * 负责人：
 */
function layerHiding(layerName) {
  if(recordTilesetData.has(layerName)) {
    let layerData = recordTilesetData.get(layerName)
    // 隐藏图层
    if(layerData.status) {
      layerData.status = !layerData.status
      layerData.tileset.show = layerData.status
      // tileset.readyPromise.then(zoomToTileset(layerData.tileset));
    } else {
      layerData.status = !layerData.status
      layerData.tileset.show = layerData.status
      // layerData.tileset.readyPromise.then(zoomToTileset(layerData.tileset));
    }
    recordTilesetData.set(layerName, layerData)
  }
}

/**
 * 名称：图层位置锁定
 * 作用：zoomToTileset则是在显示3D Tiles时把页面定位到其位置的自定义函数
 * 参数：layerName: 3Dtili信息
 * 状态：已完成
 * 网址：https://blog.csdn.net/qq_41048063/article/details/88784094
 * 负责人：
 */
function zoomToTileset(layerName) {
  if(recordTilesetData.has(layerName)) {
    let layerData = recordTilesetData.get(layerName)
    let boundingSphere = layerData.tileset.boundingSphere
    viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0))
    viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY)
  }
}

/**
 * 名称：图层透明操作
 * 作用：点击输入框的加减来改变输入的值，当值不变的时候不调用
 * 参数：layerName: 图层名称， number： 透明度参数
 * 状态：
 * 网址：
 * 负责人：
 */
function layerTransparencySettings(layerNode, number) {
  // 设置该构件的透明度
  layerNode.style = new Cesium.Cesium3DTileStyle({
    color: `color('rgba(255,255,255,${number})')`
  })
}

/**
 * 名称：图层数据
 * 作用：返回图层数据
 * 参数：modelId: 模型Id
 * 状态：
 * 网址：
 * 负责人：
 */
function getLayerData(modelId) {
  return all3dTilesLayerData
}

/**
 * 名称：组织图层标签信息（这个方法仅测试时使用，应前端写，不计入API）
 * 作用：根据tileset信息来创建图层内部信息
 * 参数：
 * @param obj 待处理对象
 * @param level 处理层级
 * 状态：已完成
 * 网址：
 * 负责人：
 */
function layerLabelinformationOrgenization(obj, level = 2) {
  if(obj.children instanceof Array && obj.children?.length) {
    obj.children.map((item, index) => {
      item['visible'] = true //控制的是图层的显隐 默认显示
      item['title'] = item['name'] //图层的名字
      item['parentNode'] = obj // 存下父级的指向
      if(item.children && item.children.length) {
        let a = level - 1
        if(level === 1) {
          // 清空
          item.children = []
        } else {
          // 有展开功能才添加该字段
          item['expend'] = false //控制的是图层的展开 默认关闭
          layerLabelinformationOrgenization(item, a)
        }
      } else {
      }
    })

  }
  return obj
}

/**
 * 名称：删除图层弹框
 * 作用：将创建好的图层弹窗进行删除
 * 参数：
 * 状态：已完成
 * 网址：
 * 负责人：
 */
function closeTheBulletBox() {
  document.getElementById('layerManage').remove()
}

/**
 * 名称：开启图层设置弹框
 * 作用：当点击图层重的设置的时候将设置弹框进行开启
 * 参数：
 * 状态：
 * 网址：
 * 负责人：
 */
function turnOnLayerSettings(layerName) {
  let layerData
  if(recordTilesetData.has(layerName)) {
    layerData = recordTilesetData.get(layerName)
  }
  var setUpDiv = document.createElement('div')
  setUpDiv.id = 'layerSetting'
  setUpDiv.className = 'custom-my-layer-setting'
  setUpDiv.innerHTML =
    '        <div class="title">' +
    '            <span class="title-name">图层设置</span>' +
    '            <span class="title-close" onclick="turnOffLayerSettings()">' +
    '                  <img src="/Source/Images/layer/esc.png">' +
    '            </span>' +
    '        </div>' +
    '        <div class="main">' +
    '            <div class="main-center">' +
    '                <div class="main-center-item">' +
    '                    <span style="margin-right: -10px">透明度设置：</span>' +
    `                    <input class="layerTransparencyClass" style="border-radius: 5px; width: 72%;" type="number" name="${layerName}" value="${layerData.transparency}" min="0" max="1" step="0.1" onclick="layerTest(layerName)">` +
    '                </div>' +
    '            </div>' +
    '        </div>'
  document.body.appendChild(setUpDiv)
  // 添加透明度设置按钮
  var layerSettings = document.getElementsByClassName('layerTransparencyClass')
  for(let i = 0; i < layerSettings.length; i++) {
    layerSettings[i].setAttribute('index', i)
    layerSettings[i].onclick = function() {
      layerTransparencySettings(layerSettings[i].name, layerSettings[i].value)
    }
  }
}

/**
 * 名称：关闭
 * 作用：当点击图层重的设置的时候将设置弹框进行开启
 * 参数：
 * 状态：
 * 网址：
 * 负责人：
 */
function turnOffLayerSettings() {
  document.getElementById('layerSetting').remove()
}
